<?php
namespace app\common\service;

use think\Env;

/*
 * 翻译处理service
 * */

class TranslateService
{
    protected $app_key;
    protected $app_secret;

    public function __construct()
    {
        $this->app_key = env('youdao.app_key');
        $this->app_secret = env('youdao.app_secret');
    }

    /*
      * 文本翻译
      * */
    public function textTranslation($query){
        $app_key = $this->app_key;
        $sec_key = $this->app_secret;//注册有道智云获取

        $api_url = 'http://openapi.youdao.com/api';//可以使用https
        $args = array(
            'q' => $query,
            'appKey' => $app_key,
            'salt' => rand(10000,99999),
            'from' => 'en',
            'to' => 'zh-CHS',

        );
        $args['sign'] = $this->buildSign($app_key, $query, $args['salt'], $sec_key);
        $ret = $this->call($api_url, $args);
        //echo $ret;
        $ret = json_decode($ret, true);
        return $ret;
    }

    //加密
    public function buildSign($appKey, $query, $salt, $secKey){
        $str = $appKey . $query . $salt . $secKey;
        $ret = md5($str);
        return $ret;
    }

    //发起网络请求
    public function call($url, $args=null, $method="post", $testflag = 0, $timeout = 20, $headers=array()){
        $ret = false;
        $i = 0;
        while($ret === false){
            if($i > 1)
                break;
            if($i > 0){
                sleep(1);
            }
            $ret = $this->callOnce($url, $args, $method, false, $timeout, $headers);
            $i++;
        }
        return $ret;
    }

    public function callOnce($url, $args=null, $method="post", $withCookie = false, $timeout = 20, $headers=array()){
        $ch = curl_init();
        if($method == "post"){
            $data = $this->convert($args);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            curl_setopt($ch, CURLOPT_POST, 1);
        }else{
            $data = $this->convert($args);
            if($data){
                if(stripos($url, "?") > 0){
                    $url .= "&$data";
                }else{
                    $url .= "?$data";
                }
            }
        }
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        if(!empty($headers)){
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        }
        if($withCookie){
            curl_setopt($ch, CURLOPT_COOKIEJAR, $_COOKIE);
        }
        $r = curl_exec($ch);
        curl_close($ch);
        return $r;
    }

    public function convert(&$args){
        $data = '';
        if (is_array($args)){
            foreach ($args as $key=>$val){
                if (is_array($val)){
                    foreach ($val as $k=>$v){
                        $data .= $key.'['.$k.']='.rawurlencode($v).'&';
                    }
                }else{
                    $data .="$key=".rawurlencode($val)."&";
                }
            }
            return trim($data, "&");
        }
        return $args;
    }
}